package com.test31_IO应用.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 键盘数据输入类
 */
public class InputUtil {
    // 实例化一个BufferedReader类对象实例，通过键盘实现数据内容的输入控制
    private static final BufferedReader KEYBOARD_INPUT = new BufferedReader(new InputStreamReader(System.in));

    private InputUtil() {
    }

    /**
     * 实现字符串数据的输入
     * @param prompt 提示的信息文字
     * @return 返回字符串内容
     */
    public static String getString(String prompt) {
        System.out.print(prompt);     // 输入提示信息
        try {
            String value = KEYBOARD_INPUT.readLine();
            return value;
        } catch (IOException e) {
            return null;
        }
    }

    /**
     * 正则格式验证的字符串输入处理操作
     * @param prompt 提示信息
     * @param regex 验证的正则表达式
     * @return 符合正则需求的字符串
     */
    public static String getString(String prompt, String regex) {
        while (true) {
            String value = getString(prompt);
            if (value.matches(regex)) {
                return value;
            } else {
                System.err.println("【错误】输入的字符串内容格式不符合要求，请重新进行内容的输入！");
            }
        }
    }

    /**
     * 通过键盘实现整型数据的获取
     * @param prompt 提示的信息文字
     * @return 返回int数值
     */
    public static int getInt(String prompt) {
        while (true) {
            String value = getString(prompt);
            if (value != null) {
                if (value.matches("\\d+")) {
                    return Integer.parseInt(value);
                } else {
                    System.err.println("【错误】输入的数据信息必须为整型，请重新进行内容的输入！");
                }
            }
        }
    }

    /**
     * 通过键盘实现整型数据的获取
     * @param prompt 提示的信息文字
     * @param error 错误信息
     * @return 返回int数值
     */
    public static int getInt(String prompt, String error) {
        while (true) {
            String value = getString(prompt);
            if (value != null) {
                if (value.matches("\\d+")) {
                    return Integer.parseInt(value);
                } else {
                    System.err.println(error);
                }
            }
        }
    }
}
